﻿/*********************************************************
 * 开发人员：小兵
 * 创建时间：2012-10-22 14:30:07
 * 描述说明：
 * 
 * 更改历史：
 * 
 * *******************************************************/
namespace Mozlite.Components
{
    using System;
    using System.Web;
    using System.Data;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web.Routing;

    /// <summary>
    /// URL路由实体类。
    /// </summary>
    public class Route
    {
        /// <summary>
        /// 初始化类<see cref="Route"/>。
        /// </summary>
        public Route() { }

        /// <summary>
        /// 路由ID。
        /// </summary>
        public int RouteID { get; set; }
        /// <summary>
        /// 区域名称。
        /// </summary>
        public string AreaName { get; set; }
        /// <summary>
        /// 区域唯一键。
        /// </summary>
        public string Key { get; set; }
        /// <summary>
        /// 获取或设置URL地址。
        /// </summary>
        public string Url { get; set; }

        private IRouteHandler handler = null;
        /// <summary>
        /// 获取当前路由处理器。
        /// </summary>
        /// <returns>返回当前路由处理器。</returns>
        public IRouteHandler RouteHandler
        {
            get
            {
                if(handler == null)
                {
                    if(RouteHandlerType.HasValue())
                    {
                        try
                        {
                            Type type = Type.GetType(RouteHandlerType);
                            if(type != null)
                            {
                                handler = Activator.CreateInstance(type) as IRouteHandler;
                            }
                        }
                        catch { }
                    }
                    if(handler == null)
                        handler = new System.Web.Mvc.MvcRouteHandler();
                }
                return handler;
            }
        }
        /// <summary>
        /// 获取或设置路由处理器类型字符串。
        /// </summary>
        public string RouteHandlerType { get; set; }

        /// <summary>
        /// 获取或设置默认值。
        /// </summary>
        public string Defaults { get; set; }
        /// <summary>
        /// 获取或设置正则表达式约束。
        /// </summary>
        public string Constraints { get; set; }
        /// <summary>
        /// 获取或设置命名空间约束。
        /// </summary>
        public string Namespaces { get; set; }
        /// <summary>
        /// 从字符串中分析为字典实例对象。
        /// </summary>
        /// <param name="str">当前字符串。</param>
        /// <returns>返回实例对象。</returns>
        internal static RouteValueDictionary FromString(string str)
        {
            if(str == null)
                return null;
            RouteValueDictionary routes = new RouteValueDictionary();
            int index;
            string key, value;
            foreach(var ds in str.Split<string>("\r\n"))
            {
                index = ds.IndexOf('=');
                if(index == -1)
                    continue;
                key = ds.Substring(0, index).Trim();
                value = ds.Substring(index + 1).Trim();
                routes.Add(key, value);
            }
            return routes;
        }
        /// <summary>
        /// 判断当前属性是否为空。
        /// </summary>
        public bool IsNullOrEmpty
        {
            get
            {
                return string.IsNullOrEmpty(this.Url) || string.IsNullOrEmpty(Defaults) || string.IsNullOrEmpty(this.Key);
            }
        }
    }
}
